/**
 * @Author：JIAMIN_TANG
 * @Description:顺序表
 * @CreateTime：2025/10/7 19:14
 */
import java.util.ArrayList;
import java.util.List;
public class Java_ArrayList {
    public static void main(String[] args){
        /*
        //ArrayList的创建
        //创建ArrayList对象，构造空的顺序表
        ArrayList<String> arrayList1 = new ArrayList<>();
        ArrayList<String> arrayList2 = null;

        //创建ArrayList对象的第二种方式
        List<String> List = new ArrayList<>();//因为ArrayList属于List子类，所以这种创建方式的写法也是对的

        //使用arrayList1复制一份，生成arrayList3
        ArrayList<String> arrayList3 = new ArrayList<>(arrayList1);

        //构造的同时，可以去指定初始容量
        ArrayList<String> arrayList = new ArrayList<>(10);//此处指定初始容量为10


        //ArrayList的常用方法

        //1.往ArrayList顺序表中添加元素——.add(元素)方法
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        System.out.println(list);
        System.out.println(list.size());//打印顺序表list的长度
//        常见的获取长度的方法：
//        数组通过.length属性获取长度
//        String类通过.length()方法获取长度
//        集合类（不仅仅只是List，还有其他集合类）通过size()方法获取长度

        //2.获取顺序表中的元素的方法——.get(该元素在顺序表中的位置)方法
        List<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        list.add("444");
        System.out.println(list.get(0));
        System.out.println(list.get(1));
        System.out.println(list.get(2));
        System.out.println(list.get(3));
        //不能再继续打印，再继续打印会出现数组越界的问题

        //3.修改指定位置的元素
        list.set(0,"ee");
        System.out.println(list);

        //4.遍历list中的元素
        //（1）使用普通的for循环遍历
        for(int i = 0;i < list.size();i++){
            System.out.println(list.get(i));
        }
        //（2）使用for-each循环遍历
        for(String s:list){
            System.out.println(s);
        }

        //5.删除list中指定位置的元素
        list.remove(2);//删除第3个索引的元素
        System.out.println(list);
        //特殊情况：如果是integer类型的ArrayList，remove(2)是删除值为2的元素还是索引为3的元素？
        List<Integer> list2 = new ArrayList<>();
        list2.add(1);
        list2.add(2);
        list2.add(3);
        list2.add(4);
        list2.remove(2);//运行之后是删除的第三个索引的元素
        System.out.println(list2);
        Integer value = 2;
        list2.remove(value);//如果要删除值为2的元素的话，要怎么写
        System.out.println(list2);
        */

        //6.顺序表的subList方法，获取原顺序表的子列表，通过修改subList方法得到的子列表的同时也会修改到原列表中对应位置的元素的值
        List<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        list.add("444");
        list.add("555");

        //取下标为[1,3)子列表
        List<String> subList_test = list.subList(1,3);
        subList_test.set(0,"aaa");
        System.out.println(subList_test);
        System.out.println(list);//原列表也被改变了

        //7.使用.clear()方法清空顺序表
        list.clear();
        System.out.println(list);
//        System.out.println(subList_test);清空原列表之后子列表直接无效了，原来照抄的东西都没有了，subList这个影子自然就没有了
    }
}
